package edu.eam.paii.proyecto.entidades;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.*;

@Entity
@NamedQuery(name="Credito.listarCreditosCliente",query="select credito from Credito credito where credito.clienteCredito=:"+Credito.CLIENTE_DOCUMENTO)
@Inheritance(strategy = InheritanceType.JOINED)
/**
 * @author Hector Bedoya Ortegon
 * @author Felipe Suarez Bedoya
 * Esta entidad permite manejar toda la informacion de el Credito. 
 */
public class Credito implements Serializable {
	// constantes
	public static final String CLIENTE_DOCUMENTO="Documento";
	public final static int CREDITO_ROTATIVO=0;

	public final static int CREDITO_LIBRE_INVERCION=1;

	public final static int CREDITO_VIVIENDA=3;
	@Id
	private int nro_Credito;
	private double valor_aprobado;
	private boolean aprobado;

	private boolean cancelado;
	private Date fecha_Ini;
	private Date fecha_Fin;
	private double deuda;
	private int nro_Cuotas;

	@ManyToOne
	@JoinColumn(name = "id_Cliente")
	private Cliente clienteCredito;

	@OneToMany(mappedBy = "creditoCuota", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<Cuota> cuotas;

	@OneToMany(mappedBy = "creditoSolicitud", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<Solicitud_Credito> solicitudes_Creditos;

	@ManyToOne
	@JoinColumn(name = "id_Tipo")
	private Tipo_Credito tipoCredito;

	public Credito(int nro_Credito, double valor_aprobado, boolean aprobado,
			boolean cancelado, Date fecha_Ini, Date fecha_Fin, double deuda,
			int nro_Cuotas, Cliente clienteCredito, List<Cuota> cuotas,
			List<Solicitud_Credito> solicitudes_Creditos,
			Tipo_Credito tipoCredito) {
		super();
		this.nro_Credito = nro_Credito;
		this.valor_aprobado = valor_aprobado;
		this.aprobado = aprobado;
		this.cancelado = cancelado;
		this.fecha_Ini = fecha_Ini;
		this.fecha_Fin = fecha_Fin;
		this.deuda = deuda;
		this.nro_Cuotas = nro_Cuotas;
		this.clienteCredito = clienteCredito;
		this.cuotas = cuotas;
		this.solicitudes_Creditos = solicitudes_Creditos;
		this.tipoCredito = tipoCredito;
	}

	public Credito() {
		// TODO Auto-generated constructor stub
	}

	public int getNro_Credito() {
		return nro_Credito;
	}

	public void setNro_Credito(int nro_Credito) {
		this.nro_Credito = nro_Credito;
	}

	public double getValor_aprobado() {
		return valor_aprobado;
	}

	public void setValor_aprobado(double valor_aprobado) {
		this.valor_aprobado = valor_aprobado;
	}

	public boolean isAprobado() {
		return aprobado;
	}

	public void setAprobado(boolean aprobado) {
		this.aprobado = aprobado;
	}

	public boolean isCancelado() {
		return cancelado;
	}

	public void setCancelado(boolean cancelado) {
		this.cancelado = cancelado;
	}

	public Date getFecha_Ini() {
		return fecha_Ini;
	}

	public void setFecha_Ini(Date fecha_Ini) {
		this.fecha_Ini = fecha_Ini;
	}

	public Date getFecha_Fin() {
		return fecha_Fin;
	}

	public void setFecha_Fin(Date fecha_Fin) {
		this.fecha_Fin = fecha_Fin;
	}

	public double getDeuda() {
		return deuda;
	}

	public void setDeuda(double deuda) {
		this.deuda = deuda;
	}

	public int getNro_Cuotas() {
		return nro_Cuotas;
	}

	public void setNro_Cuotas(int nro_Cuotas) {
		this.nro_Cuotas = nro_Cuotas;
	}

	public Cliente getClienteCredito() {
		return clienteCredito;
	}

	public void setClienteCredito(Cliente clienteCredito) {
		this.clienteCredito = clienteCredito;
	}

	public List<Cuota> getCuotas() {
		return cuotas;
	}

	public void setCuotas(List<Cuota> cuotas) {
		this.cuotas = cuotas;
	}

	public List<Solicitud_Credito> getSolicitudes_Creditos() {
		return solicitudes_Creditos;
	}

	public void setSolicitudes_Creditos(
			List<Solicitud_Credito> solicitudes_Creditos) {
		this.solicitudes_Creditos = solicitudes_Creditos;
	}

	public Tipo_Credito getTipoCredito() {
		return tipoCredito;
	}

	public void setTipoCredito(Tipo_Credito tipoCredito) {
		this.tipoCredito = tipoCredito;
	}

}
